// #include<iostream>
// #include<memory>
// #include<new>
//
// using namespace std;
// class A;
//
// class B
// {
// public:
//     B(){
//         cout << "B" << endl;
//     };
//     ~B()
//     {
//         cout << "~B" << endl;
//     };
//     weak_ptr<A> a;
// };
// class A
// {
// public:
//     A(){
//         cout << "A" << endl;
//     };
//     ~A()
//     {
//         cout << "~A" << endl;
//     };
//     weak_ptr<B> b;
//
// protected:
// };
//
// void test_weak_ptr()
// {
//     //弱引用智能指针主要是为了解决循环引用指针无法释放的问题
//     A a{};
//     B b{};
//     shared_ptr<A> aPtr = make_shared<A>(a);
//     shared_ptr<B> bPtr = make_shared<B>(b);
//     a.b = bPtr;
//     b.a= aPtr;
//
//     cout << aPtr.use_count() << endl;
//     cout << bPtr.use_count() << endl;
//
//     //弱引用 weak_ptr
//     //不能直接创建weak_ptr 一定通过shared_ptr来创建
//     //weak_ptr 不能直接访问数据  通过lock 函数访问shared_ptr对象再去访问数据
//     //不会影响计数的改变
//
//     shared_ptr<int> pint(new int(8888));
//     shared_ptr<int> p2=  pint;
//     cout << p2.use_count() << endl;
//     //通过shared_ptr来创建
//     weak_ptr<int> p3(pint);
//     cout << p2.use_count() << endl;
//     cout << p3.use_count() << endl;
//
//     cout << *pint << endl;
//     //shared_ptr<int> object = p3.lock();
//     cout << *p3.lock() << endl;
//
//
//
//
// }
//
// int main()
// {
//     test_weak_ptr();
//     return 0;
// }